gtk: Remove GtkPropertySelection
authorBenjamin Otte <otte@redhat.com>
Sun, 21 Jun 2020 16:03:25 +0000 (18:03 +0200)
committerBenjamin Otte <otte@redhat.com>
Fri, 26 Jun 2020 05:13:32 +0000 (07:13 +0200)
GtkMultiSelection is so much faster than this that it isn't needed.

12 files changed:
docs/reference/gtk/gtk4-docs.xml
docs/reference/gtk/gtk4-sections.txt
docs/reference/gtk/gtk4.types.in
gtk/gtk.h
gtk/gtkpropertyselection.c [deleted file]
gtk/gtkpropertyselection.h [deleted file]
gtk/meson.build
po-properties/POTFILES.in
po/POTFILES.in
testsuite/gtk/defaultvalue.c
testsuite/gtk/notify.c
testsuite/gtk/objects-finalize.c

index 2351a3688b5ba0549e027b1353eb9976d63a3a7f..f6a46015cc6641960b14506de295f22c260ccb59 100644 (file)
@@ -73,7 +73,6 @@
         <xi:include href="xml/gtknoselection.xml" />
         <xi:include href="xml/gtksingleselection.xml" />
         <xi:include href="xml/gtkmultiselection.xml" />
-      <xi:include href="xml/gtkpropertyselection.xml" />
       </section>
       <xi:include href="xml/gtkbookmarklist.xml" />
       <xi:include href="xml/gtkdirectorylist.xml" />
index 739415f6cde11507d24d102f3fd433c1925f5872..ec497c66ea1c80d7db542db3a14f00f844f23c54 100644 (file)
@@ -448,17 +448,6 @@ gtk_multi_selection_new
 gtk_multi_selection_get_type
 </SECTION>
 
-<SECTION>
-<FILE>gtkpropertyselection</FILE>
-<TITLE>GtkPropertySelection</TITLE>
-GtkPropertySelection
-gtk_property_selection_new
-gtk_property_selection_get_model
-gtk_property_selection_get_property
-<SUBSECTION Private>
-gtk_property_selection_get_type
-</SECTION>
-
 <SECTION>
 <FILE>gtklistitem</FILE>
 <TITLE>GtkListItem</TITLE>
index 9090e496c8bf5d6aea3198ff5dd961ed20f8b3bf..d61305ae2e6bfdd3ca60b6a210749b81a3fbbe65 100644 (file)
@@ -172,7 +172,6 @@ gtk_print_operation_preview_get_type
 gtk_print_settings_get_type
 @DISABLE_ON_W32@gtk_print_unix_dialog_get_type
 gtk_progress_bar_get_type
-gtk_property_selection_get_type
 gtk_radio_button_get_type
 gtk_range_get_type
 gtk_recent_manager_get_type
index 0aa7ad888e9dcc351c8fdbe29cd71f44c95d0627..f4c105e6e5221aa621a9c8c94bf7c2f28e70b6f8 100644 (file)
--- a/gtk/gtk.h
+++ b/gtk/gtk.h
 #include <gtk/gtkprintoperationpreview.h>
 #include <gtk/gtkprintsettings.h>
 #include <gtk/gtkprogressbar.h>
-#include <gtk/gtkpropertyselection.h>
 #include <gtk/gtkradiobutton.h>
 #include <gtk/gtkrange.h>
 #include <gtk/gtkrecentmanager.h>
diff --git a/gtk/gtkpropertyselection.c b/gtk/gtkpropertyselection.c
deleted file mode 100644 (file)
index f3f973f..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
- * Copyright © 2020 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors: Matthias Clasen <mclasen@redhat.com>
- */
-
-#include "config.h"
-
-#include "gtkpropertyselection.h"
-
-#include "gtkbitset.h"
-#include "gtkintl.h"
-#include "gtkselectionmodel.h"
-
-/**
- * SECTION:gtkpropertyselection
- * @Short_description: A selection model that uses an item property
- * @Title: GtkPropertySelection
- * @see_also: #GtkSelectionModel
- *
- * GtkPropertySelection is an implementation of the #GtkSelectionModel
- * interface that stores the selected state for each item in a property
- * of the item.
- *
- * The property named by #GtkPropertySelection:property must be writable
- * boolean property of the item type. GtkPropertySelection preserves the
- * selected state of items when they are added to the model, but it does
- * not listen to changes of the property while the item is a part of the
- * model. It assumes that it has *exclusive* access to the property.
- *
- * The advantage of storing the selected state in item properties is that
- * the state is *persistent* -- when an item is removed and re-added to
- * the model, it will still have the same selection state. In particular,
- * this makes the selection persist across changes of the sort order if
- * the underlying model is a #GtkSortListModel.
- */
-
-struct _GtkPropertySelection
-{
-  GObject parent_instance;
-
-  GListModel *model;
-  char *property;
-};
-
-struct _GtkPropertySelectionClass
-{
-  GObjectClass parent_class;
-};
-
-enum {
-  PROP_0,
-  PROP_MODEL,
-  PROP_PROPERTY,
-
-  N_PROPS,
-};
-
-static GParamSpec *properties[N_PROPS] = { NULL, };
-
-static GType
-gtk_property_selection_get_item_type (GListModel *list)
-{
-  GtkPropertySelection *self = GTK_PROPERTY_SELECTION (list);
-
-  return g_list_model_get_item_type (self->model);
-}
-
-static guint
-gtk_property_selection_get_n_items (GListModel *list)
-{
-  GtkPropertySelection *self = GTK_PROPERTY_SELECTION (list);
-
-  return g_list_model_get_n_items (self->model);
-}
-
-static gpointer
-gtk_property_selection_get_item (GListModel *list,
-                                 guint       position)
-{
-  GtkPropertySelection *self = GTK_PROPERTY_SELECTION (list);
-
-  return g_list_model_get_item (self->model, position);
-}
-
-static void
-gtk_property_selection_list_model_init (GListModelInterface *iface)
-{
-  iface->get_item_type = gtk_property_selection_get_item_type;
-  iface->get_n_items = gtk_property_selection_get_n_items;
-  iface->get_item = gtk_property_selection_get_item;
-}
-
-static gboolean
-is_selected (GtkPropertySelection *self,
-             guint                 position)
-{
-  gpointer item;
-  gboolean ret;
-
-  item = g_list_model_get_item (self->model, position);
-  g_object_get (item, self->property, &ret, NULL);
-  g_object_unref (item);
-
-  return ret;
-}
-
-static void
-set_selected (GtkPropertySelection *self,
-              guint                 position,
-              gboolean              selected)
-{
-  gpointer item;
-
-  item = g_list_model_get_item (self->model, position);
-  g_object_set (item, self->property, selected, NULL);
-  g_object_unref (item);
-}
-
-static gboolean
-gtk_property_selection_is_selected (GtkSelectionModel *model,
-                                    guint              position)
-{
-  return is_selected (GTK_PROPERTY_SELECTION (model), position);
-}
-
-static gboolean
-gtk_property_selection_set_selection (GtkSelectionModel *model,
-                                      GtkBitset         *selected,
-                                      GtkBitset         *mask)
-{
-  GtkPropertySelection *self = GTK_PROPERTY_SELECTION (model);
-  GtkBitsetIter iter;
-  guint i, n, min, max;
-  gboolean has_value;
-
-  n = g_list_model_get_n_items (G_LIST_MODEL (self));
-  min = G_MAXUINT;
-  max = 0;
-
-  for (has_value = gtk_bitset_iter_init_first (&iter, mask, &i);
-       has_value && i < n;
-       has_value = gtk_bitset_iter_next (&iter, &i))
-    {
-      set_selected (self, i, gtk_bitset_contains (selected, i));
-      /* XXX: Check if something changed? */
-      min = MIN (min, i);
-      max = MAX (max, i);
-    }
-
-  if (min <= max)
-    gtk_selection_model_selection_changed (model, min, max - min + 1);
-
-  return TRUE;
-}
-
-static void
-gtk_property_selection_selection_model_init (GtkSelectionModelInterface *iface)
-{
-  iface->is_selected = gtk_property_selection_is_selected;
-  iface->set_selection = gtk_property_selection_set_selection;
-}
-
-G_DEFINE_TYPE_EXTENDED (GtkPropertySelection, gtk_property_selection, G_TYPE_OBJECT, 0,
-                        G_IMPLEMENT_INTERFACE (G_TYPE_LIST_MODEL,
-                                               gtk_property_selection_list_model_init)
-                        G_IMPLEMENT_INTERFACE (GTK_TYPE_SELECTION_MODEL,
-                                               gtk_property_selection_selection_model_init))
-
-static void
-gtk_property_selection_items_changed_cb (GListModel           *model,
-                                         guint                 position,
-                                         guint                 removed,
-                                         guint                 added,
-                                         GtkPropertySelection *self)
-{
-  g_list_model_items_changed (G_LIST_MODEL (self), position, removed, added);
-}
-
-static void
-gtk_property_selection_clear_model (GtkPropertySelection *self)
-{
-  if (self->model == NULL)
-    return;
-
-  g_signal_handlers_disconnect_by_func (self->model,
-                                        gtk_property_selection_items_changed_cb,
-                                        self);
-  g_clear_object (&self->model);
-}
-
-static void
-gtk_property_selection_real_set_property (GObject      *object,
-                                          guint         prop_id,
-                                          const GValue *value,
-                                          GParamSpec   *pspec)
-
-{
-  GtkPropertySelection *self = GTK_PROPERTY_SELECTION (object);
-
-  switch (prop_id)
-    {
-    case PROP_MODEL:
-      self->model = g_value_dup_object (value);
-      g_warn_if_fail (self->model != NULL);
-      g_signal_connect (self->model,
-                        "items-changed",
-                        G_CALLBACK (gtk_property_selection_items_changed_cb),
-                        self);
-      break;
-
-    case PROP_PROPERTY:
-      {
-        GObjectClass *class;
-        GParamSpec *prop;
-
-        self->property = g_value_dup_string (value);
-        g_warn_if_fail (self->property != NULL);
-
-        class = g_type_class_ref (g_list_model_get_item_type (self->model));
-        prop = g_object_class_find_property (class, self->property);
-        g_warn_if_fail (prop != NULL &&
-                        prop->value_type == G_TYPE_BOOLEAN &&
-                        ((prop->flags & (G_PARAM_READABLE|G_PARAM_WRITABLE|G_PARAM_CONSTRUCT_ONLY)) ==
-                        (G_PARAM_READABLE|G_PARAM_WRITABLE)));
-        g_type_class_unref (class);
-      }
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-gtk_property_selection_real_get_property (GObject    *object,
-                                          guint       prop_id,
-                                          GValue     *value,
-                                          GParamSpec *pspec)
-{
-  GtkPropertySelection *self = GTK_PROPERTY_SELECTION (object);
-
-  switch (prop_id)
-    {
-    case PROP_MODEL:
-      g_value_set_object (value, self->model);
-      break;
-
-    case PROP_PROPERTY:
-      g_value_set_string (value, self->property);
-      break;
-
-    default:
-      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
-      break;
-    }
-}
-
-static void
-gtk_property_selection_dispose (GObject *object)
-{
-  GtkPropertySelection *self = GTK_PROPERTY_SELECTION (object);
-
-  gtk_property_selection_clear_model (self);
-
-  g_free (self->property);
-
-  G_OBJECT_CLASS (gtk_property_selection_parent_class)->dispose (object);
-}
-
-static void
-gtk_property_selection_class_init (GtkPropertySelectionClass *klass)
-{
-  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
-  gobject_class->get_property = gtk_property_selection_real_get_property;
-  gobject_class->set_property = gtk_property_selection_real_set_property;
-  gobject_class->dispose = gtk_property_selection_dispose;
-
-  /**
-   * GtkPropertySelection:model
-   *
-   * The list managed by this selection
-   */
-  properties[PROP_MODEL] =
-    g_param_spec_object ("model",
-                         P_("Model"),
-                         P_("List managed by this selection"),
-                         G_TYPE_LIST_MODEL,
-                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
-
-  properties[PROP_PROPERTY] =
-    g_param_spec_string ("property",
-                         P_("Property"),
-                         P_("Item property to store selection state in"),
-                         NULL,
-                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_EXPLICIT_NOTIFY | G_PARAM_STATIC_STRINGS);
-
-  g_object_class_install_properties (gobject_class, N_PROPS, properties);
-}
-
-static void
-gtk_property_selection_init (GtkPropertySelection *self)
-{
-}
-
-/**
- * gtk_property_selection_new:
- * @model: (transfer none): the #GListModel to manage
- * @property: the item property to use
- *
- * Creates a new property selection to handle @model.
- *
- * @property must be the name of a writable boolean property
- * of the item type of @model.
- *
- * Note that GtkPropertySelection does not monitor the property
- * for changes while the item is part of the model, but it does
- * inherit the initial value when an item is added to the model.
- *
- * Returns: (transfer full) (type GtkPropertySelection): a new #GtkPropertySelection
- **/
-GListModel *
-gtk_property_selection_new (GListModel *model,
-                            const char *property)
-{
-  g_return_val_if_fail (G_IS_LIST_MODEL (model), NULL);
-
-  return g_object_new (GTK_TYPE_PROPERTY_SELECTION,
-                       "model", model,
-                       "property", property,
-                       NULL);
-}
-
-/**
- * gtk_property_selection_get_model:
- * @self: a #GtkPropertySelection
- *
- * Gets the underlying model.
- *
- * Returns: (transfer none): the underlying model
- */
-GListModel *
-gtk_property_selection_get_model (GtkPropertySelection *self)
-{
-  g_return_val_if_fail (GTK_IS_PROPERTY_SELECTION (self), NULL);
-
-  return self->model;
-}
-
-/**
- * gtk_property_selection_get_property:
- * @self: a #GtkPropertySelection
- *
- * Gets the name of the item property that @self stores
- * the selection in.
- *
- * Returns: the name of the property
- */
-const char *
-gtk_property_selection_get_property (GtkPropertySelection *self)
-{
-  g_return_val_if_fail (GTK_IS_PROPERTY_SELECTION (self), NULL);
-
-  return self->property;
-}
diff --git a/gtk/gtkpropertyselection.h b/gtk/gtkpropertyselection.h
deleted file mode 100644 (file)
index 8a24404..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright © 2019 Red Hat, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library. If not, see <http://www.gnu.org/licenses/>.
- *
- * Authors: Matthias Clasen <mclasen@redhat.com>
- */
-
-#ifndef __GTK_PROPERTY_SELECTION_H__
-#define __GTK_PROPERTY_SELECTION_H__
-
-#include <gtk/gtktypes.h>
-#include <gtk/gtkselectionmodel.h>
-
-G_BEGIN_DECLS
-
-#define GTK_TYPE_PROPERTY_SELECTION (gtk_property_selection_get_type ())
-
-GDK_AVAILABLE_IN_ALL
-G_DECLARE_FINAL_TYPE (GtkPropertySelection, gtk_property_selection, GTK, PROPERTY_SELECTION, GObject)
-
-GDK_AVAILABLE_IN_ALL
-GListModel *    gtk_property_selection_new      (GListModel     *model,
-                                                 const char     *property);
-
-GDK_AVAILABLE_IN_ALL
-GListModel *    gtk_property_selection_get_model    (GtkPropertySelection *self);
-
-GDK_AVAILABLE_IN_ALL
-const char *    gtk_property_selection_get_property (GtkPropertySelection *self);
-
-G_END_DECLS
-
-#endif /* __GTK_PROPERTY_SELECTION_H__ */
index 4eb26952f6cf931314fa87576053e450ca079258..5a7ca5715f2691e50d18d70d4e9aca3e7772011b 100644 (file)
@@ -329,7 +329,6 @@ gtk_public_sources = files([
   'gtkprintsettings.c',
   'gtkprogressbar.c',
   'gtkpropertylookuplistmodel.c',
-  'gtkpropertyselection.c',
   'gtkradiobutton.c',
   'gtkrange.c',
   'gtktreerbtree.c',
@@ -607,7 +606,6 @@ gtk_public_headers = files([
   'gtkprintoperationpreview.h',
   'gtkprintsettings.h',
   'gtkprogressbar.h',
-  'gtkpropertyselection.h',
   'gtkradiobutton.h',
   'gtkrange.h',
   'gtkrecentmanager.h',
index a89edb2ce451c7354ae2f91c41e80966cf8d5d91..64513074de5db57f7a99579b9cdc829a50d84cbd 100644 (file)
@@ -255,7 +255,6 @@ gtk/gtkprintoperation-win32.c
 gtk/gtkprintunixdialog.c
 gtk/gtkprogressbar.c
 gtk/gtkpropertylookuplistmodel.c
-gtk/gtkpropertyselection.c
 gtk/gtkradiobutton.c
 gtk/gtkrange.c
 gtk/gtkrecentmanager.c
index 7ca93df20450b652cb4418ee89425308e71466fc..604d5c839723a94732e7882a51986959e73c4301 100644 (file)
@@ -257,7 +257,6 @@ gtk/gtkprintoperation-win32.c
 gtk/gtkprintunixdialog.c
 gtk/gtkprogressbar.c
 gtk/gtkpropertylookuplistmodel.c
-gtk/gtkpropertyselection.c
 gtk/gtkradiobutton.c
 gtk/gtkrange.c
 gtk/gtkrecentmanager.c
index 15c9047a933d0d531b4ee712a1719ab5bc04bb85..34e6fb9f18226c7d465ec742758da6bf9247d7f4 100644 (file)
@@ -104,9 +104,6 @@ test_type (gconstpointer data)
       g_type_is_a (type, GTK_TYPE_SHORTCUT_ACTION))
     return;
 
-  if (g_type_is_a (type, GTK_TYPE_PROPERTY_SELECTION))
-    return;
-
   klass = g_type_class_ref (type);
 
   if (g_type_is_a (type, GTK_TYPE_SETTINGS))
index 209685ed38e0d1bae29e6df8479365f7c92743a3..ddd806948db973d3a9fec89338355477f488db3e 100644 (file)
@@ -425,10 +425,6 @@ test_type (gconstpointer data)
      g_type_is_a (type, GTK_TYPE_NAMED_ACTION))
     return;
 
-  /* needs special item type in underlying model */
-  if (g_type_is_a (type, GTK_TYPE_PROPERTY_SELECTION))
-    return;
-
   klass = g_type_class_ref (type);
 
   if (g_type_is_a (type, GTK_TYPE_SETTINGS))
index bd26c83c2340e484b4a86daab8428dffa534663a..e46f404424a97d182507801164e10915f1b66375 100644 (file)
@@ -80,8 +80,7 @@ test_finalize_object (gconstpointer data)
                              NULL);
       g_object_unref (list_store);
     }
-  else if (g_type_is_a (test_type, GTK_TYPE_LAYOUT_CHILD) ||
-           g_type_is_a (test_type, GTK_TYPE_PROPERTY_SELECTION))
+  else if (g_type_is_a (test_type, GTK_TYPE_LAYOUT_CHILD))
     {
       char *msg = g_strdup_printf ("Skipping %s", g_type_name (test_type));
       g_test_skip (msg);